package cn.itcast.controller;

import cn.itcast.pojo.Emp;
import cn.itcast.pojo.PageBean;
import cn.itcast.pojo.Result;
import cn.itcast.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
@RequestMapping("/emps")
@Slf4j
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping
    public Result findPage(
            @RequestParam Integer page,
            @RequestParam Integer pageSize,
            String name,
            Integer gender,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end
    ){
        log.info("当前页是:{},每页个数是:{}",page,pageSize);
        //调用service分页查询
        PageBean<Emp> pageBean = empService.findEmpByPage(page, pageSize,name,gender,begin,end);
        return pageBean == null || pageBean.getRows().size() == 0 ? Result.error("没有查询到数据") : Result.success("查询成功", pageBean);
    }
    @PostMapping
    public Result add(@RequestBody Emp emp){
        boolean result = empService.add(emp);
        return result ? Result.success("添加成功") : Result.error("添加失败");
    }

    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id) {
        log.info("根据ID查询员工信息，id：{}", id);

        // 调用Service层方法获取员工信息
        Emp emp = empService.findById(id);

        return Result.success(emp);
    }


    @PutMapping
    public Result update(@RequestBody Emp emp){
        boolean result = empService.update(emp);
        return result ? Result.success("修改成功") : Result.error("修改失败");
    }




    //@GetMapping
    /*public Result findByConditionAndPage(
            String name,
            Integer gender,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
            @RequestParam (defaultValue = "1") Integer page,
            @RequestParam (defaultValue = "10") Integer pageSize
    ) {
        PageBean<Emp> byConditionAndPage = empService.findByConditionAndPage(name, gender, begin, end, page, pageSize);
        log.info("查询结果：{}",byConditionAndPage);
        return byConditionAndPage == null || byConditionAndPage.getRows().size() == 0 ? Result.error("success") : Result.success("查询成功", byConditionAndPage);
    }
    @PostMapping
    public Result add(@RequestBody Emp emp){
        boolean result = empService.add(emp);
        return result ? Result.success("添加成功") : Result.error("添加失败");
    }

    *//*
    key=value格式,
      当键对应的值有多个, 并且使用逗号隔开的时候,
      我们声明数组是直接可以对接上去
      当键对应的值有多个, 并且使用逗号隔开的时候,
      我们声明集合是不能直接可以对接上去,集合尝试
      创建集合对象,但是接口没有构造函数, 需要使用
      @RequestParam标注一下就可以解决
     *//*

    @DeleteMapping
    public Result deleteByIds(@RequestParam List<Integer> ids){
        log.warn("接受到的要删除的ids是:{}", ids);
        boolean result = empService.deleteByIds(ids);
        return result ? Result.success("删除成功") : Result.error("删除失败");
    }
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id){
        //查谁返谁
        Emp emp = empService.findById(id);
        //根据接口文档返回结果
        return emp == null ? Result.error("查询失败") : Result.success("查询成功", emp);
    }

    @PutMapping
    public Result update(@RequestBody Emp emp){
        boolean result = empService.update(emp);
        return result ? Result.success("修改成功") : Result.error("修改失败");
    }
    @GetMapping("/list")
    public Result findAllEmp(){
        List<Emp> emps = empService.findAllEmp();
        return emps == null || emps.size() == 0 ? Result.error("查询失败") : Result.success("查询成功", emps);
    }*/
}
